package org.longsheng.GroovyLearn.java.aop;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.List;

@Slf4j
public class WordProxyHandler implements InvocationHandler {

    /**
     * 原对象，被代理对象
     */
    private Object word;

    public WordProxyHandler(Object word) {
        this.word = word;
    }

    /**
     * <p>代理方法</p>
     *
     * @param proxy  生成的代理对象
     * @param method 被代理对象的方法，反射执行invoke需要传入原对象
     * @param args   被代理对象的方法的入参
     * @return
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("动态代理哦！");

        before();

        Object result = method.invoke(word, args);

        after(args, result);
        return result;
    }

    private void before() {
        // TODO
    }

    private void after(Object[] args, Object result) {
        try {
            String content = args[0].toString();
            List<String> resultList = (List<String>) result;

            log.info("日志：{} - {}", content, resultList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}